/*********************************************
 * @autheur : CHOLLET Clément                *
 * @date    : 03.04.2013                     *
 * @version : 1.0 - Création de la classe    *
 *********************************************/
#include "lumiere.h"

//-----------------------------------------------------Constructeurs et destructeurs-----------------------------------------------------//

/****************************************************************************
 * Constructeur avec paramètres                                             *
 * @param nom : numero de la lumière (GL_LIGHT1)                            *
 ****************************************************************************/
Lumiere::Lumiere(GLint numero)
    : _numero(numero)
{
    _couleurAmbiante[0] = 0.2f;
    _couleurAmbiante[1] = 0.2f;
    _couleurAmbiante[2] = 0.2f;
    _couleurAmbiante[3] = 1.0f;

    _couleurDiffuse[0] = 0.8f;
    _couleurDiffuse[1] = 0.8f;
    _couleurDiffuse[2] = 0.8f;
    _couleurDiffuse[3] = 1.0f;

    _couleurSpeculaire[0] = 0.0f;
    _couleurSpeculaire[1] = 0.0f;
    _couleurSpeculaire[2] = 0.0f;
    _couleurSpeculaire[3] = 1.0f;

    _brillanceSpeculaire = 0.0f;

    _positionLumiere[0] = 0.0;
    _positionLumiere[1] = 0.0;
    _positionLumiere[2] = 1.0;
    _positionLumiere[3] = 0.0;

    _direction[0] = 0.0f;
    _direction[1] = 0.0f;
    _direction[2] = -1.0f;

    _concentrationSpot = 0.0f;
    _rayonSpot = 180.0f;
}

//---------------------------------------------------------------Méthodes----------------------------------------------------------------//

/****************************************************************************
 * Activation d'une lumière                                                 *
 ****************************************************************************/
void Lumiere::enable()
{
    glEnable(_numero);
}

/****************************************************************************
 *  Désactivation d'une lumière                                             *
 ****************************************************************************/
void Lumiere::disable()
{
    glDisable(_numero);
}

//---------------------------------------------------------------Accesseurs--------------------------------------------------------------//

/********************************************
 *  On affecte num à la variable _numero    *
 *  @param num : nouvelle valeur de _numero *
 ********************************************/
void Lumiere::setNomLumiere(GLint num)
{
    _numero = num;
}

/****************************************************************************************
 * On affecte les valeurs RGBA  à la variable _couleurAmbiante                          *
 * @param rouge: nouvelle valeur de la composante rouge de la variable _couleurAmbiante *
 * @param vert: nouvelle valeur de la composante verte de la variable _couleurAmbiante  *
 * @param bleu: nouvelle valeur de la composante bleue de la variable _couleurAmbiante  *
 * @param alpha: nouvelle valeur du paramètre alpha de la variable _couleurAmbiante     *
 ****************************************************************************************/
void Lumiere::setCouleurAmbiante(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha)
{
    _couleurAmbiante[0] = rouge;
    _couleurAmbiante[1] = vert;
    _couleurAmbiante[2] = bleu;
    _couleurAmbiante[3] = alpha;
}

/****************************************************************************************
 * On affecte les valeurs RGBA  à la variable _couleurDiffuse                           *
 * @param rouge: nouvelle valeur de la composante rouge de la variable _couleurDiffuse  *
 * @param vert: nouvelle valeur de la composante verte de la variable _couleurDiffuse   *
 * @param bleu: nouvelle valeur de la composante bleue de la variable _couleurDiffuse   *
 * @param alpha: nouvelle valeur du paramètre alpha de la variable _couleurDiffuse      *
 ****************************************************************************************/
void Lumiere::setCouleurDiffuse(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha)
{
    _couleurDiffuse[0] = rouge;
    _couleurDiffuse[1] = vert;
    _couleurDiffuse[2] = bleu;
    _couleurDiffuse[3] = alpha;
}

/******************************************************************************************
 * On affecte les valeurs RGBA  à la variable _couleurSpeculaire                          *
 * @param rouge: nouvelle valeur de la composante rouge de la variable _couleurSpeculaire *
 * @param vert: nouvelle valeur de la composante verte de la variable _couleurSpeculaire  *
 * @param bleu: nouvelle valeur de la composante bleue de la variable _couleurSpeculaire  *
 * @param alpha: nouvelle valeur du paramètre alpha de la variable _couleurSpeculaire     *
 ******************************************************************************************/
void Lumiere::setCouleurSpeculaire(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha)
{
    _couleurSpeculaire[0] = rouge;
    _couleurSpeculaire[1] = vert;
    _couleurSpeculaire[2] = bleu;
    _couleurSpeculaire[3] = alpha;
}

/*****************************************************************************************************
 * On affecte les valeurs RGBA à la variable _couleurReflectionSpeculaire                            *
 * @param rouge: nouvelle valeur de la composante rouge de la variable _couleurReflectionSpeculaire  *
 * @param vert: nouvelle valeur de la composante verte de la variable _couleurReflectionSpeculaire   *
 * @param bleu: nouvelle valeur de la composante bleue de la variable _couleurReflectionSpeculaire   *
 * @param alpha: nouvelle valeur du paramètre alpha de la variable _couleurReflectionSpeculaire      *
 *****************************************************************************************************/
void Lumiere::setCouleurReflectionSpeculaire(GLfloat rouge, GLfloat vert, GLfloat bleu, GLfloat alpha)
{
    _couleurReflectionSpeculaire[0] = rouge;
    _couleurReflectionSpeculaire[1] = vert;
    _couleurReflectionSpeculaire[2] = bleu;
    _couleurReflectionSpeculaire[3] = alpha;
}

/************************************************************************************
 * On affecte les coordonnées x,y,z,w à la variable _positionLumiere                *
 * @param x : nouvelle valeur de la coordonnée en x de la variable _positionLumiere *
 * @param y : nouvelle valeur de la coordonnée en y de la variable _positionLumiere *
 * @param z : nouvelle valeur de la coordonnée en z de la variable _positionLumiere *
 * @param w : nouvelle valeur de la coordonnée en w de la variable _positionLumiere *
 ************************************************************************************/
void Lumiere::setPositionLumiere(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
{
    _positionLumiere[0] = x;
    _positionLumiere[1] = y;
    _positionLumiere[2] = z;
    _positionLumiere[3] = w;
}

/******************************************************************************
 * On affecte les coordonnées x,y,z,w à la variable _direction                *
 * @param x : nouvelle valeur de la coordonnée en x de la variable _direction *
 * @param y : nouvelle valeur de la coordonnée en y de la variable _direction *
 * @param z : nouvelle valeur de la coordonnée en z de la variable _direction *
 ******************************************************************************/
void Lumiere::setDirection(GLfloat x, GLfloat y, GLfloat z)
{
    _direction[0] = x;
    _direction[1] = y;
    _direction[2] = z;
}

/*********************************************************************
 *  On affecte concentrationSpot à la variable _concentrationSpot    *
 *  @param concentrationSpot : nouvelle valeur de _concentrationSpot *
 *********************************************************************/
void Lumiere::setConcentrationSpot(GLfloat concentrationSpot)
{
    _concentrationSpot = concentrationSpot;
}

/*****************************************************
 *  On affecte rayonSpot à la variable _rayonSpot    *
 *  @param rayonSpot : nouvelle valeur de _rayonSpot *
 *****************************************************/
void Lumiere::setRayonSpot(GLfloat rayonSpot)
{
    _rayonSpot = rayonSpot;
}

//------------------------------------------------------Surcharge des opérateurs---------------------------------------------------------//


